<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>js面试题</title>
</head>
<body>
<a href="http://web.jobbole.com/85122/">js</a>
<p>
    此题涉及的知识点众多，包括变量定义提升、this指针指向、运算符优先级、原型、继承、全局变量污染、对象属性及原型属性优先级等等。
</p>
<script>
    //函数
    function Foo()
    {
        getName = function(){alert(1);}
        return this;
    }
    //静态属性
    Foo.getName = function(){alert(2);};
    //原型对象新创建一个匿名函数
    Foo.prototype.getName = function(){alert(3);};
    //函数表达式创建一个函数
    var getName = function(){alert(4);};
    //声明一个函数
    function getName(){alert(5);};

    Foo.getName(); //访问Foo函数上存储的静态属性
    getName(); //直接调用 getName 函数  坑1、变量声明提升（所有声明变量或声明函数都会被提升到当前函数的顶部。）  坑2、函数表达式
    Foo().getName(); //先执行Foo函数，然后调用Foo函数的返回值对象的getName属性函数
    getName(); //window.getName()
    new Foo.getName(); //运算符优先级 new (Foo.getName())()  . 的优先级  高于 new
    new Foo().getName(); // () 的优先级  高于 new (new 优先级高于 函数调用 )  (new Foo()).getName()
    new new Foo().getName(); // new ((new Foo()).getName)()
</script>
</body>
</html>